Skip to content
0

Jenkins - 安装和配置 ​

持续集成流程说明 ​

image-20220822224205145

  • 首先,开发人员每天进行代码提交,提交到 Git 仓库
  • 然后,Jenkins 作为持续集成工具,使用 Git 工具到 Git 仓库拉取代码到集成服务器,再配合 JDK,Maven 等软件完成代码编译,代码测试与审查,测试,打包等工作,在这个过程中每一步出错,都重新再执行一次整个流程
  • 最后,Jenkins 把生成的 jar 或 war 包分发到测试服务器或者生产服务器,测试人员或用户就可以访问应用

Gitlab 代码托管服务器安装 ​

Gitlab 简介 ​

image-20220822224332254

官网: https://about.gitlab.com/。

GitLab 是一个用于仓库管理系统的开源项目,使用 Git 作为代码管理工具,并在此基础上搭建起来的 Web 服务。

GitLab 和 GitHub 一样属于第三方基于 Git 开发的作品,免费且开源(基于 MIT 协议),与 Github 类似, 可以注册用户,任意提交你的代码,添加 SSH Key 等等。不同的是,GitLab 是可以部署到自己的服务器上,数据库等一切信息都掌握在自己手上,适合团队内部协作开发,你总不可能把团队内部的智慧总放在别人的服务器上吧?简单来说可把 GitLab 看作个人版的 GitHub。

在 SSH 下安装 ​

官方安装文档:https://gitlab.cn/install/?version=ce

安装依赖 ​

sh
sudo yum install -y curl policycoreutils-python openssh-server perl
sudo systemctl enable sshd
sudo systemctl start sshd

配置镜像 ​

sh
curl -fsSL https://packages.gitlab.cn/repository/raw/scripts/setup.sh | /bin/bash

开始安装 ​

sh
sudo EXTERNAL_URL="http://192.168.44.103" yum install -y gitlab-jh

除非您在安装过程中指定了自定义密码,否则将随机生成一个密码并存储在 /etc/gitlab/initial_root_password 文件中(出于安全原因,24 小时后,此文件会被第一次 gitlab-ctl reconfigure 自动删除,因此若使用随机密码登录,建议安装成功初始登录成功之后,立即修改初始密码)。使用此密码和用户名 root 登录。

GitLab 常用命令 ​

sh
gitlab-ctl start                  # 启动所有 gitlab 组件;
gitlab-ctl stop                   # 停止所有 gitlab 组件;
gitlab-ctl restart                # 重启所有 gitlab 组件;
gitlab-ctl status                 # 查看服务状态;
gitlab-ctl reconfigure            # 启动服务;
vi /etc/gitlab/gitlab.rb         # 修改默认的配置文件;
gitlab-ctl tail                   # 查看日志;

在 Docker 下安装 ​

https://docs.gitlab.cn/jh/install/docker.html

安装所需最小配置

  • 内存至少 4G
  • 系统内核至少在 3.10 以上 uname -r 命令可查看系统内核版本

安装 Docker ​

  1. 更新 yum 源
sh
yum update
  1. 安装依赖
sh
yum install -y yum-utils device-mapper-persistent-data lvm2
  1. 添加镜像
sh
# 国外镜像
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 阿里镜像
https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  1. 查看源中可使用版本
sh
 yum list docker-ce --showduplicates | sort -r
  1. 安装指定版本
sh
yum install docker
  1. 配置开机启动项
sh
systemctl start docker
systemctl enable docker
docker version

使用容器安装 GitLab ​

  1. 添加容器
shell
docker run --detach \
  --hostname 192.168.44.103 \
  --publish 443:443 --publish 80:80 \
  --name gitlab \
  --restart always \
  --volume $GITLAB_HOME/config:/etc/gitlab:Z \
  --volume $GITLAB_HOME/logs:/var/log/gitlab:Z \
  --volume $GITLAB_HOME/data:/var/opt/gitlab:Z \
  --shm-size 256m \
  registry.gitlab.cn/omnibus/gitlab-jh:latest
  1. 启动容器
shell
docker start gitlab
  1. 查看已存在的容器
shell
docker ps -a
  1. 进入容器
docker exec -it  gitlab /bin/bash

访问 ​

http://192.168.44.101

当首次运行出现 502 错误的时候排查两个原因

  1. 虚拟机内存至少需要 4G
  2. 稍微再等等刷新一下可能就好了

image-20220822224900683

管理员账号登录 ​

用户名:root

密码存在下面文件中,登录后需要改密码不然 24 小时之后会失效

sh
cat /etc/gitlab/initial_root_password

JDK 安装 ​

检索可用包

yum search java|grep jdk

安装

yum install java-1.8.0-openjdk

首次启动 W ar 包会在 /root/.jenkins 生成配置文件

待完全启动成功后 访问服务器 8080 端口完成配置

初始化后的密码:

sh
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:

4e67bbe261da476abdc63c5b51311646

This may also be found at: /root/.jenkins/secrets/initialAdminPassword

密码文件使用后会自动删除。

jenkins 安装 ​

官方文档介绍非常详细:https://www.jenkins.io

下载页面:https://jenkins.io/zh/download/

Jenkins 插件管理 ​

Jenkins 本身不提供很多功能,我们可以通过使用插件来满足我们的使用。例如从 Gitlab 拉取代码,使用 Maven 构建项目等功能需要依靠插件完成。接下来演示如何下载插件。

修改 Jenkins 插件下载地址 ​

Jenkins 国外官方插件地址下载速度非常慢,所以可以修改为国内插件地址:

Jenkins -> Manage Jenkins -> Manage Plugins,点击 Available,此时他会把 Jenkins 官方的插件列表下载到本地,等下载完后,我们就修改为国内地址。

先进入插件地址

sh
cd /var/lib/jenkins/updates

复制下面命令,切换国内地址:

sh
sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

最后在 Manage Plugins 点击 Advanced,把 Update Site 改为国内插件下载地址:

http
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

Sumbit 后,在浏览器输入: http://112.74.169.231:8087/restart,重启 Jenkins。

下载中文汉化插件 ​

Jenkins -> Manage Jenkins -> Manage Plugins,点击 Available,搜索 Chinese,然后点击 Install without restart 进行安装。

最后重启 Jenkins 后,就看到 Jenkins 汉化了。(PS:但可能部分菜单汉化会失败)

Jenkins 用户权限管理 ​

我们可以利用 Role-based Authorization Strategy 插件来管理 Jenkins 用户权限。

先去安装 Role-based Authorization Strategy 插件

image-20220822233130427

开启权限全局安全配置

image-20220822233145016

授权策略切换为「Role-Based Strategy」,保存

创建角色 ​

在系统管理页面进入 Manage and Assign Roles

image-20220822233324434

点击 Manage Roles

image-20220822233424956

  • Global roles(全局角色):管理员等高级用户可以创建基于全局的角色
  • Project roles(项目角色):针对某个或者某些项目的角色 Slave roles(奴隶角色):节点相关的权限

我们添加以下三个角色:

  • baseRole:该角色为全局角色。这个角色需要绑定 Overall 下面的 Read 权限,是为了给所有用户绑定最基本的 Jenkins 访问权限。注意:如果不给后续用户绑定这个角色,会报错误:用户名 is missing the Overall/Read permission
  • role1:该角色为项目角色。使用正则表达式绑定 kbt.*,意思是只能操作 kbt 开头的项目
  • role2:该角色也为项目角色。绑定 youngkbt.*,意思是只能操作 youngkbt 开头的项目

创建用户 ​

在系统管理页面进入 Manage Users,接着点击新建用户,分别创建两个用户:jack 和 eric。

给用户分配角色 ​

系统管理页面进入 Manage and Assign Roles,点击 Assign Roles。

绑定规则如下:

  • eric 用户分别绑定 baseRole 和 role1 角色
  • jack 用户分别绑定 baseRole 和 role2 角色

创建项目测试权限 ​

以 youngkbt 管理员账户创建两个项目,分别为 kbt01 和 youngkbt01

结果为:

  • eric 用户登录,只能看到 kbt01 项目
  • jack 用户登录,只能看到 youngkbt01 项目

Jenkins 凭证管理 ​

凭据可以用来存储需要密文保护的数据库密码、Gitlab 密码信息、Docker 私有仓库密码等,以便 Jenkins 可以和这些第三方的应用进行交互。

Credentials Binding 插件 ​

要在 Jenkins 使用凭证管理功能,需要安装 Credentials Binding 插件。

image-20220822233957016

安装插件后,左边多了 凭证 菜单,在这里管理所有凭证。

image-20220822234019202

可以添加的凭证有 5 种:

image-20220822234033594

  • Username with password:用户名和密码
  • SSH Username with private key:使用 SSH 用户和密钥
  • Secret file:需要保密的文本文件,使用时 Jenkins 会将文件复制到一个临时目录中,再将文件路径设置到一个变量中,等构建结束后,所复制的 Secret file 就会被删除
  • Secret text:需要保存的一个加密的文本串,如钉钉机器人或 Github 的 api token
  • Certificate:通过上传证书文件的方式

常用的凭证类型有:Username with password(用户密码)和 SSH Username with private key(SSH 密钥)

接下来以使用 Git 工具到 Gitlab 拉取项目源码为例,演示 Jenkins 的如何管理 Gitlab 的凭证。

安装 Git 插件和 Git 工具 ​

为了让 Jenkins 支持从 Gitlab 拉取源码,需要安装 Git 插件以及在 CentOS 7 上安装 Git 工具。

Git 插件安装:

image-20220822234303850

CentOS7 上安装 Git 工具:

sh
yum install git -y # 安装
git --version # 安装后查看版本

用户密码类型 ​

创建凭证

Jenkins -> 凭证 -> 系统 -> 全局凭证 -> 添加凭证

image-20220822234437657

image-20220822234517365

选择 Username with password,输入 Gitlab 的用户名和密码,点击确定。

测试凭证是否可用

创建一个 FreeStyle 项目:新建 Item -> FreeStyle Project -> 确定。

找到 源码管理 -> Git,在 Repository URL 复制 Gitlab 中的项目 URL

image-20220822234635824

image-20220822234747295

因为项目的分支是 master 分支,所以下面的地址改为 */master

image-20220822234808218

保存配置后,点击构建 Build Now 开始构建项目

image-20220822234927473

image-20220822234944973

查看 /var/lib/jenkins/workspace/ 目录,发现已经从 Gitlab 成功拉取了代码到 Jenkins 中。

SSH 密钥类型 ​

SSH 免密登录示意图

image-20220822235020472

使用 root 用户生成公钥和私钥

sh
ssh-keygen -t rsa

在 /root/.ssh/ 目录保存了公钥和使用

  • id_rsa:私钥文件
  • id_rsa.pub:公钥文件

把生成的公钥放在 Gitlab 中

以 root 账户登录 -> 点击头像 -> Settings -> SSH Keys

复制刚才 id_rsa.pub 文件的内容到这里,点击 Add Key

在 Jenkins 中添加凭证,配置私钥

在 Jenkins 添加一个新的凭证,类型为 SSH Username with private key,把刚才生成私有文件内容复制过来

image-20220822235314726

测试凭证是否可用

新建 test02 项目 -> 源码管理 -> Git,这次要使用 Gitlab 的 SSH 连接,并且选择 SSH 凭证。

同样尝试构建项目,如果代码可以正常拉取,代表凭证配置成功。

Maven 安装和配置 ​

在 Jenkins 集成服务器上,我们需要安装 Maven 来编译和打包项目。

安装 Maven ​

先上传 Maven 压缩包到服务器

sh
tar -xzf apache-maven-3.6.2-bin.tar.gz # 解压
mkdir -p /opt/maven # 创建目录
mv apache-maven-3.6.2/* /opt/maven # 移动文件

配置环境变量

sh
vi /etc/profile
sh
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export MAVEN_HOME=/opt/maven
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
sh
source /etc/profile # 配置生效
mvn -v # 查看 Maven 版本

全局工具配置关联 JDK 和 Maven ​

Jenkins -> Global Tool Configuration -> JDK -> 新增 JDK,配置如下:

image-20220822235558796

Jenkins -> Global Tool Configuration -> Maven -> 新增 Maven,配置如下:

image-20220822235628384

添加 Jenkins 全局变量 ​

Manage Jenkins -> Configure System -> Global Properties,添加三个全局变量 JAVA_HOME、M2_HOME、PATH+EXTRA

image-20220822235824139

修改 Maven 的 settings.xml

sh
mkdir /root/repo # 创建本地仓库目录
vi /opt/maven/conf/settings.xml

本地仓库改为:/root/repo/

添加阿里云私服地址:

xml
<mirror>
    <id>nexus</id>
    <mirrorOf>*</mirrorOf>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>

测试 Maven 是否配置成功 ​

使用之前的 Gitlab 密码测试项目,修改配置:

构建 -> 增加构建步骤 -> Execute Shell

image-20220822235957100

输入

sh
mvn clean package

image-20220823000018310

再次构建,如果可以把项目打成 War 包,代表 Maven 环境配置成功啦。

Tomcat 安装和配置 ​

安装 Tomcat8.5。

把 Tomcat 压缩包上传到服务器

sh
tar -xzf apache-tomcat-8.5.47.tar.gz # 解压
mkdir -p /opt/tomcat # 创建目录
mv /root/apache-tomcat-8.5.47/* /opt/tomcat # 移动文件
/opt/tomcat/bin/startup.sh # 启动tomcat

注意:服务器已经关闭了防火墙,所以可以直接访问 Tomcat 啦。

地址为:http://IP 地址:8080

配置 Tomcat 用户角色权限 ​

默认情况下 Tomcat 是没有配置用户角色权限的。

image-20220823000255809

但是,后续 Jenkins 部署项目到 Tomcat 服务器,需要用到 Tomcat 的用户,所以修改 Tomcat 以下配置,添加用户及权限

sh
vi /opt/tomcat/conf/tomcat-users.xml

内容如下:

xml
<tomcat-users>
    <role rolename="tomcat"/>
    <role rolename="role1"/>
    <role rolename="manager-script"/>
    <role rolename="manager-gui"/>
    <role rolename="manager-status"/>
    <role rolename="admin-gui"/>
    <role rolename="admin-script"/>
    <user username="tomcat" password="tomcat" roles="manager-gui,managerscript,tomcat,admin-gui,admin-script"/>
</tomcat-users>

用户和密码都是:tomcat。

注意:为了能够刚才配置的用户登录到 Tomcat,还需要修改以下配置:

sh
vi /opt/tomcat/webapps/manager/META-INF/context.xml
xml
<!--
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
	allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->

把上面这行注释掉即可。

重启 Tomcat,访问测试

sh
/opt/tomcat/bin/shutdown.sh # 停止
/opt/tomcat/bin/startup.sh # 启动

访问:http://IP地址:8080/manager/html,看到以下页面代表成功啦。

image-20220823000528343

最近更新